home *** CD-ROM | disk | FTP | other *** search
/ Young Minds / Young Minds Interactive CD-ROM.ISO / crystal / cvcopy.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-01-12  |  1.5 KB  |  90 lines

  1. /*    cvcopy.c
  2.  *        copy initialization code into the crystal file
  3.  ************************************************************************/
  4.  
  5. #include    <stdio.h>
  6. #include    <filehdr.h>
  7. #include    <ldfcn.h>
  8. #include    <fcntl.h>
  9. #include    <sys/stat.h>
  10.  
  11. #include    "cvmisc.h"
  12. #include    "cvinit.h"
  13.  
  14. extern char *malloc();
  15.  
  16. static char crynam[] = "crystal";
  17.  
  18. main(argc,argv)
  19. int argc;
  20. char *argv[];
  21. {
  22.     auto int r, w;
  23.     auto char *abuff;
  24.     auto unsigned length, rlen;
  25.     auto long where,offset;
  26.     auto FILE *stream;
  27.     auto LDFILE *ldptr;
  28.     auto struct stat cstat;
  29.  
  30.     ldptr = NULL;
  31.     if ((ldptr = ldopen(crynam,ldptr)) == NULL ) {
  32.         perror(argv[0]);
  33.         exit(1);
  34.     }
  35.     if (ldnsseek(ldptr,".data") == FAILURE) {
  36.         perror(argv[0]);
  37.         exit(1);
  38.     }
  39.     if ( (r = open(path,O_RDWR)) == EOF) {
  40.         perror(argv[0]);
  41.         exit(1);
  42.     }
  43.     if ( (w = open(crynam,O_RDWR)) == EOF) {
  44.         perror(argv[0]);
  45.         exit(1);
  46.     }
  47.     stream = IOPTR(ldptr);
  48.     offset = ftell(stream);
  49.     if ((where = lseek(w,offset,0)) == (long)-1 ) {
  50.         perror(argv[0]);
  51.         exit(1);
  52.     }
  53.     if (fstat(r,&cstat)) {
  54.         perror(argv[0]);
  55.         exit(1);
  56.     }
  57.     length = cstat.st_size;
  58.     if ((abuff = malloc(length)) == NULL ) {
  59.         perror(argv[0]);
  60.         exit(1);
  61.     }
  62.     if ((rlen = read(r,abuff,length)) == EOF || rlen != length) {
  63.         perror(argv[0]);
  64.         exit(1);
  65.     }
  66.     if (write(w,abuff,length) == EOF) {
  67.         perror(argv[0]);
  68.         exit(1);
  69.     }
  70.     free(abuff);
  71.  
  72.     if (close(r)) {
  73.         perror(argv[0]);
  74.         exit(1);
  75.     }
  76.     if (close(w)) {
  77.         perror(argv[0]);
  78.         exit(1);
  79.     }
  80.     if (ldclose(ldptr) == FAILURE) {
  81.         perror(argv[0]);
  82.         exit(1);
  83.     }
  84.     if (unlink(path) == EOF) {
  85.         perror(argv[0]);
  86.         exit(1);
  87.     }
  88.     return;
  89. }
  90.